
/**
 * AppHelper
 * 应用
 * @author              罗伟权
 * @createdate          2013-08-14
 * @version             1.0
 */

#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface XApp : NSObject

#pragma mark 前后台通知
/**
 * 获取应用版本
 * 获取应用当中 xxx-info.plist 文件中 Bundle version 字段对应的值
 * @result                           NSString类型，返回结果如：1.201
 */
+ (NSString*)appVersion;


/**
 * 添加通知响应
 * @param       notification，对应的通知
 * @param       action，对应的响应操作
 * @param       target，响应通知的对象
 * @result
 */
//+ (void)addNotification:(NSString *)notification
//              forAction:(SEL)action
//               inTarget:(id)target;
+ (void)addTarget:(id)target sel:(SEL)selector forNotification:(NSString*)noti;


/**
 * 删除通知响应
 * @param       notification，对应的通知
 * @param       target，响应通知的对象
 * @result
 */
//+ (void)removeNotification:(NSString *)notification
//           forActionTarget:(id)target;
+ (void)removeTarget:(id)target forNotification:(NSString*)noti;


#pragma mark 操作调用
/**
 * 操作调用
 *
 * cmd 规则如下：
 * 1、直接的网页跳转：http://www.wownew.cn
 * 2、应用跳转：ios:// + 视图控制器类名 + ?参数1=xx&参数2=xx……，如：ios://RouteDetailViewController?line_no=1
 *
 * 应用跳转界面响应编写规则：
 * 1、必须通过 initWithNibName:bundle: 初始化
 * 2、通过 setParams: 设置参数，参数通过 NSDictionary 进行封装
 * 3、通过 show 实现视图的导航加入（若没有show方法，则会直接调用 pushViewController 加入）
 *
 * @param   cmd     NSString 类型，命令
 * @result
 */
+ (void)excute:(NSString *)cmd;


/**
 * 打电话
 * @param   phone     NSString 类型，电话号码
 * @result
 */
+ (void)phoneCall:(NSString *)phone;


/**
 * 判断当前设备是否为iPhone4、iTouch4
 * @result                           BOOL类型，是iPhone4或iTouch4设备时返回YES，否则返回NO
 */
+ (BOOL)isiDevice4;


#pragma mark 导航相关
/**
 * 设置全局的返回按钮样式
 * @param   image，正常情况下的图片
 * @param   highlightImage，高亮时候的图片
 * @param   fOffSet，按钮便宜，若为负数，则按钮将往屏幕左边贴近，正数为远离屏幕左边
 * @result
 */
+ (void)setNavigationBackImage:(UIImage *)image
                highlightImage:(UIImage *)highlightImage
                        offSet:(CGFloat)fOffSet;

/**
 * 设置根导航控制器
 * @param   rootNavigationController，根导航控制器
 * @result
 */
+ (void)setRootNavigationController:(UINavigationController *)rootNavgationController;

/**
    获取根导航控制器
 */
+ (UINavigationController *)rootNavgationController;


/**
 * Push 入栈 将对应的视图控制器压入当前的导航栏视图控制器堆栈当中
 * @param   viewController          UIViewController 类型，需要压栈的视图控制器
 * @result
 */
+ (void)pushViewController:(UIViewController *)viewController;


/**
 * Push 入栈 将对应的视图控制器压入当前的导航栏视图控制器堆栈当中
 * @param   viewController          UIViewController 类型，需要压栈的视图控制器
 * @param   animate                 BOOL 类型，标识是否使用动画
 * @result
 */
+ (void)pushViewController:(UIViewController *)viewController withAnimate:(BOOL)animate;


/**
 * Pop 出栈 将最上方的视图控制器托出当前的导航栏视图控制器堆栈当中
 * @result
 */
+ (void)popViewController;


/**
 * Pop 出栈 将最上方的视图控制器托出当前的导航栏视图控制器堆栈当中
 * @param   animate                 BOOL 类型，标识是否使用动画
 * @result
 */
+ (void)popViewControllerWithAnimate:(BOOL)animate;


/**
 * Pop 出栈 退到指定的视图控制器
 * @param   viewController          UIViewController 类型，需要出栈的视图控制器位置（对应位置上的视图控制器）
 * @result
 */
+ (void)popViewControllerTo:(UIViewController *)viewController;


/**
 * Pop 出栈 退到遇到指定的视图控制器类型
 * @param   viewControllerClass     Class 类型，需要出栈的视图控制器位置（Pop出视图控制器，直到遇到对应的视图控制器为止）
 * @result
 */
+ (void)popUntilMatchClassOfViewController:(Class)viewControllerClass;


/**
 * Pop 出栈 退到拥有与指定的标题一致标题的视图控制器
 * @param   viewControllerTitle     NSString 类型，需要出栈的视图控制器位置（Pop出视图控制器，直到遇到对应的视图控制器标题为止）
 * @result
 */
+ (void)popUntilMatchTitleOfViewController:(NSString *)viewControllerTitle;

@end

